#include <iostream>

class Base
{
public:
   virtual Base* clone() = 0;  // 原型接口，声明克隆方法
   virtual void show() = 0;
};

class Derived:public Base
{
public:
   Base * clone()
   {
    return new Derived(*this);     // 在子类中拷贝，出来的是父类指针，但是使用的还是子类
   }
   void show()
   {
    std::cout<<"Derived"<<std::endl;
   }
};

int main()
{
    Base *ptr = new Derived;
    Base *p2 = ptr->clone();
    p2->show();
    return 0;
}
